package com.work.daily.stream;

import com.work.daily.stream.data.Person;

import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;

/**
 * Stream 的收集(collect)
 * collect，收集，可以说是内容最繁多、功能最丰富的部分了。从字面上去理解，就是把一个流收集起来，
 * 最终可以是收集成一个值也可以收集成一个新的集合。
 *
 * @author Shengkang.Mo
 * @create 2020-11-27 16:44
 * 归约(reducing)
 * Collectors类提供的reducing方法，相比于stream本身的reduce方法，增加了对自定义归约的支持。
 */
public class Stream_7_5 {
    public static void main(String[] args) {
        List<Person> personList = Person.initData();

        // 每个员工减去起征点后的薪资之和
        Integer sum = personList.stream().collect(Collectors.reducing(0, Person::getSalary, (i, j) -> (i + j - 5000)));
        System.out.println("员工扣税薪资总和：" + sum);

        //Stream 的reduce
        Optional<Integer> sum2 = personList.stream().map(Person::getSalary).reduce(Integer::sum);
        System.out.println("Stream reduce 员工薪资总和：" + sum2.get());
    }
}
